package cn.lg.soar.activiti.api.model;

import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
@Getter
@Setter
public class StartProcessDTO {

	/**
	 * 流程key
	 */
	@NotBlank(message = "流程key不能为空")
	private String processKey;

	/**
	 * 业务id
	 */
	@NotBlank(message = "业务id不能为空")
	private String businessId;

	/**
	 * 标题
	 */
	private String title;

	/**
	 * 变量
	 */
	private Map<String, Object> variables;

	/**
	 * 自动完成第一个节点任务
	 */
	private CompleteTaskDTO completeTask;

	/**
	 * 添加变量
	 * @param key
	 * @param value
	 */
	public void addVariable(String key, Object value) {
		if (variables == null) {
			variables = new HashMap<>();
		}
		variables.put(key, value);
	}

	/**
	 * 设置任务评价
	 * @param comment
	 */
	public void setTaskComment(String comment) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.setComment(comment);
	}

	/**
	 * 添加任务变量
	 * @param key
	 * @param value
	 */
	public void addTaskVariable(String key, Object value) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addVariable(key, value);
	}

	/**
	 * 添加任务候选人
	 * @param candidate
	 */
	public void addTaskCandidate(String candidate) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addCandidate(candidate);
	}

	/**
	 * 添加任务候选人
	 * @param nodeKey 节点key
	 * @param candidate
	 */
	public void addTaskCandidate(String nodeKey, String candidate) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addCandidate(nodeKey, candidate);
	}

	/**
	 * 添加任务候选角色
	 * @param roleCode
	 */
	public void addTaskCandidateRole(String roleCode) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addCandidateRole(roleCode);
	}

	/**
	 * 添加任务候选角色
	 * @param nodeKey 节点key
	 * @param roleCode
	 */
	public void addTaskCandidateRole(String nodeKey, String roleCode) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addCandidateRole(nodeKey, roleCode);
	}

	/**
	 * 添加任务候选机构
	 * @param orgId
	 */
	public void addTaskCandidateOrg(Serializable orgId) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addCandidateOrg(orgId);
	}

	/**
	 * 添加任务候选机构
	 * @param nodeKey 节点key
	 * @param orgId
	 */
	public void addTaskCandidateOrg(String nodeKey, Serializable orgId) {
		if (completeTask == null) {
			completeTask = new CompleteTaskDTO();
		}
		completeTask.addCandidateOrg(nodeKey, orgId);
	}

}
